const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')

// 设置nodejs环境变量
process.env.NODE_ENV = 'development'

module.exports = {
  entry: './src/js/index.js',
  output: {
    filename: 'js/built.js',
    path: resolve(__dirname, 'build')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          // 创建style标签，将样式引入
          // 'style-loader', 
          // 这个loader取代style-loader。作用：提取js中的css成单独文件。优点：减少js体积，避免页面渲染闪频。
          MiniCssExtractPlugin.loader,
          // 将css文件整合到js文件中
          'css-loader',
          /*
            css兼容性处理：postcss 依赖 postcss-loader postcss-preset-env
            识别对应的环境加载对应的配置
            该插件帮postcss找到package.json中browserslist里面的配置，通过配置加载指定的css兼容性样式
            
            "browserslist": {
              // 开发环境，设置node环境变量：process.env.NODE_ENV = development
              "development": [
                "last 1 chrome version", // 兼容最近的一个chrome版本
                "last 1 firefox version",
                "last 1 safari version"
              ],
              // 生产环境：默认是生产环境
              "production": [
                ">0.2%", // 全球超过0.2%人使用的浏览器
                "not dead", // 不要已经丢弃的浏览器
                "not op_mini all" // 不要所有的欧朋浏览器
              ]
            }
          */
          // 使用postcss默认配置
          // 'postcss-loader'
          // 修改loader的配置
          {
            loader: 'postcss-loader',
            options: {
              // 最新版本使用方法
              postcssOptions: {
                plugins: [
                  // postcss的插件：识别对应的环境加载对应的配置
                  'postcss-preset-env'
                ]
              }
              /* 
                旧版本使用方法
                ident: 'postcss',
                plugins:  () => [
                  // postcss的插件：识别对应的环境加载对应的配置
                  require('postcss-preset-env')()
                ]
              */
            }
          }

        ]
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html'
    }),
    new MiniCssExtractPlugin({
      // 对输出的css文件进行重命名
      filename: 'css/built.css'
    }),
    // 压缩css
    new OptimizeCssAssetsWebpackPlugin()
  ],
  mode: 'development'
}